Cada vez es más necesaria la utilización de soluciones software que estén probadas y permitan un desarrollo de aplicaciones más ágil y robusto.
Las arquitecturas orientadas a servicios (SOA Service Oriented Architecture ) son un tipo de diseño de software que permite reutilizar sus elementos.
Consiste en un conjunto de servicios independientes que trabajan juntos para realizar una tarea común, donde cada servicio se encarga de una parte específica y puede ser utilizado por varias aplicaciones.
SOA hace referencia a un conjunto de elementos (servicios) independientes que trabajan de manera conjunta para dar solución a un problema mayor.
Como cada servicio puede utilizar una tecnología diferente, SOA no se vincula a una única tecnología en concreto.
La idea principal de SOA es ofrecer soluciones software para crear aplicaciones a partir de diferentes módulos independientes.
Un servicio web permite un desarrollo software utilizando una arquitectura basada a servicios, pues los módulos creados pueden ser reutilizados en diferentes contextos y aplicaciones, existiendo módulos escritos en diferentes lenguajes.
Cuando se utiliza POC para dar lugar a SOA, se pasa por tres fases:
Páginas web estáticas con poca interacción.
Orientación a bases de datos y aplicaciones web de servidor
Utilización masiva de diferentes objetos para el desarrollo.
Es en esta tercera parte donde entra el desarrollo SOA y servicios WEB.
El diseño de una arquitectura basada en servicios está caracterizado por cuatro componentes arquitectónicos básicos:
Proveedor: Es uno de los elementos fundamentales ya que se encarga de proporcionar los diferentes servicios disponibles.
Recibe peticiones del consumidor para utilizar servicios.
SOAP: Es la tecnología utilizada por los consumidores para poder invocar a los servicios que han descubierto y comunicarse con el consumidor.
Consumidor: es quien utiliza la funcionalidad proporcionada por un servicio.
El consumidor intercambia mensajes con el proveedor y utiliza sus servicios.
Registro de servicios: permite el descubrimiento dinámico de servicios.

SOAP (Simple Object Access Protocol): protocolo de intercambio de mensajes basado en XML, que permite la comunicación entre servicios web. Este protocolo es independiente de cualquier protocolo de transporte específico, pudiendo usar varios de forma transparente, aunque lo más habitual es que SOAP se use sobre el protocolo HTTP.
WSDL (Web Services Description Language) lenguaje estándar de descripción de servicios web: es un lenguaje específico XML que permite definir la interfaz de un servicio web. Entre otras cosas este lenguaje permite definir el conjunto de operaciones que describen el servicio, el tipo de parámetros necesarios, el tipo de puerto o las distintas cuestiones de interacción.

La definición WSDL de la interfaz de un servicio es independiente de la implementación específica que se haga de ella. Así, una misma interfaz podría ser implementada por varios proveedores.

REST (Representational State Transfer): es otra forma de llegar a un recurso web sin introducir ninguna lógica nueva para el acceso, sino que utiliza las primitivas de HTTP que ya están definidas.
Los servicios REST suelen ser fáciles de implementar y utilizar.

El elemento más relevante de SOA es el servicio, pues es quien implementa una solución para un problema determinado y la pone a disposición de las solicitudes.
Las aplicaciones desarrolladas con SOA tienen tres características:
Bajo acoplamiento: se refiere a que un servicio no dependa de otro, es decir, que funcione de manera independiente.
Esto permite que las diferentes partes de una aplicación sean más fáciles de modificar.
Distribuidas: se ejecutan en múltiples dispositivos o sistemas y se comunican entre sí a través de una red.
Esto hace que sean escalables y aumenten su disponibilidad.
Accesibles utilizando la red: pueden ser utilizadas por cualquier cliente, independientemente de su ubicación geográfica o dispositivo utilizado para acceder a ellas.
Suelen esta desplegadas en la nube o en servidores web y pueden ser utilizadas a través de un navegador web o a través de una aplicación móvil.
Han de cumplir con estándares de accesibilidad web, como el WCAG (Web Content Accessibility Guidelines) de la W3C (World Wide Web Consortium).
Los servicios web pueden ser utilizados en diferentes situaciones:
Servicios simples y públicos: REST.
Integración de aplicaciones, EAI (Enterprise Application Integration): utilización de servicios en una aplicación para permitir una extensión o una funcionalidad ya implementada.
Tecnologías Grid.
En la actualidad disponemos de diferentes sistemas para el desarrollo de servicios web utilizando diferentes lenguajes, tecnologías y sistemas operativos. A pesar de ello, todas las soluciones utilizan una arquitectura SOA, lo que permite el intercambio de servicios de manera transparente a la tecnología subyacente.
Algunas de las plataformas más utilizadas son:
Apache Axis: Es un marco de desarrollo de aplicaciones web para la creación y el consumo de servicios web basados en SOAP (Simple Object Access Protocol).
Web Services for Java Platform: Utiliza la tecnología Java que se puede dividir en tres grupos:
Core web Services: En este grupo se incorporan las tecnologías básicas para el desarrollo de servicios web.
Enhanced web services: En este módulo se incluyen funcionalidades para servicios web que requieran funcionalidades especiales como el intercambio de mensajes.
Secure web services: Se centran en dotar de aspectos de seguridad a los servicios web.
.NET: Entorno de desarrollo y ejecución que permite la utilización de diferentes lenguajes de programación y librerías para crear aplicaciones bajo un entorno Windows.
IBM WebSphere: Se trata de un middleware para crear aplicaciones multiplataforma utilizando servicios web.